Modern storage devices use many different interfaces, such as Serial AT Attachment (SATA), Serial Attached Small Computer System Interface (SCSI) (SAS), and Non-Volatile Memory Express (NVMe), among others, to connect to host machines. Host systems and operating systems are required to support these multi-protocol/device environments. For example, faster or higher performing devices may be assigned and used as cache or a higher tier by the OS/driver/VM/application. Slower devices may be used as a lower tier of storage etc.
From a hardware perspective, storage devices are designed and programmed to be a fixed specific device by the manufacturers. For example, manufacturers must decide upfront that the devices should be classified as SAS or SATA respectively before shipping out. Once manufactured and shipped, a customer might not make any protocol changes afterward.
Host operating systems and applications must be designed to handle a variety of mixed devices. This required robustness in terms of hardware support results in operating system and application complexity and expense. Conventionally, all storage devices are required to inform the host whether to use SATA, SAS, enterprise NVMe, or other transport protocols. The host operating systems is then required to perform bus enumeration and discover all of these devices. In a large system, this process takes several minutes to complete.
A need remains for a way for devices to configure themselves based on information about the chassis into which the devices are installed.